package resml

import "io"

// 可计算进度的 Reader，实现 Progress 接口
type ProgressReader struct {
	r     io.Reader
	n     int64
	total int64
}

// 创建可计算进度的 Reader
func NewProgressReader(r io.Reader, total int64) *ProgressReader {
	return &ProgressReader{r: r, total: total}
}

// 实现 io.Reader 接口
func (r *ProgressReader) Read(p []byte) (n int, err error) {
	n, err = r.r.Read(p)
	r.n += int64(n)
	return
}

// 获取已读取的字节数
func (r *ProgressReader) Current() int64 {
	return r.n
}

// 总字节数
func (r *ProgressReader) Total() int64 {
	return r.total
}

// 读取进度的百分比，比如 89.76
func (r *ProgressReader) Percent() float64 {
	if r.total == 0 {
		return 0
	}
	return float64(r.n) / float64(r.total) * 100
}
